package com.hc.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Date;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;

public class OSS {
	private OSSClient client;

	/**
	 * 删除节点
	 * 
	 * @param bucketName
	 *            节点名称
	 */
	public void deleteBucket(String bucketName) {
		client.deleteBucket(bucketName);
	}

	/**
	 * 创建节点
	 * 
	 * @param bucketName
	 *            节点名称
	 */
	public void createBucket(String bucketName) {
		client.createBucket(bucketName);
	}

	/**
	 * 上传到某个节点下的文件
	 * 
	 * @param bucketName
	 *            节点名称
	 * @param key
	 *            上传文件key（自己设置）
	 * @param inputStream
	 *            文件流
	 */
	public void putObject(String bucketName, String key, InputStream inputStream) {
		client.putObject(bucketName, key, inputStream, new ObjectMetadata());
		try {
			if(inputStream!=null){
				inputStream.close();
			}
		} catch (IOException e) {
			LoggerUtil.error(e);
		}
	}

	/**
	 * 下载某个节点下的文件
	 * 
	 * @param bucketName
	 *            节点名称
	 * @param key
	 *            上传文件key（自己设置）
	 * @param localPath
	 *            文件存放路径
	 */
	public void getObject(String bucketName, String key, String localPath) {
		client.getObject(new GetObjectRequest(bucketName, key), new File(localPath));
	}
	/**
	 * 
	 * @Description： getInputStream
	 * @author:
	 * @param bucketName
	 * @param key
	 * @return
	 * @Version: 1.0 
	 * @since: 2016年12月27日 上午10:41:20
	 */
	public String getInputStream(String bucketName, String key) {
		OSSObject ossObject = client.getObject(bucketName, key);
		InputStreamReader in = new InputStreamReader(ossObject.getObjectContent());
		BufferedReader reader = new BufferedReader(in);
		StringBuffer sb = new StringBuffer();
		try {
			while (true) {
				String line;
				line = reader.readLine();
				if (line == null)
					break;
				sb.append(line);
			}
		} catch (Exception e) {
			LoggerUtil.error(e);
		} finally {
			try {
				in.close();
				reader.close();
			} catch (IOException e) {
				LoggerUtil.error(e);
			}
		}
		return sb.toString();
	}

	/**
	 * 删除某个节点下的文件
	 * 
	 * @param bucketName
	 *            节点名称
	 * @param key
	 *            上传文件key（自己设置）
	 *
	 */
	public void deleteObject(String bucketName, String key) {
		client.deleteObject(bucketName, key);
	}

	/**
	 * 
	 * @param bucketName
	 *            节点名称
	 * @param key
	 *            文件key
	 * @param expiration
	 *            文件过期时间
	 * @return String url 外网访问地址
	 */
	public String getUrl(String bucketName, String key) {
		// 设置URL过期时间为10年 3600* 1000*24*365*10
		Date expiration = new Date(new Date().getTime() + 3600 * 1000 * 24 *365 * 10);
		URL url = client.generatePresignedUrl(bucketName, key, expiration);
		if (url != null) {
			return url.toString();
		}
		return null;
	}

	public void setClient(OSSClient client) {

		this.client = client;
	}

}
